home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / g / gnu_c / gempp19.zoo / gem++19 / src / gemfiw.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-01  |  2.7 KB  |  117 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  This file is Copyright 1992,1993 by Warwick W. Allison.
  4. //  This file is part of the gem++ library.
  5. //  You are free to copy and modify these sources, provided you acknowledge
  6. //  the origin by retaining this notice, and adhere to the conditions
  7. //  described in the file COPYING.LIB.
  8. //
  9. /////////////////////////////////////////////////////////////////////////////
  10.  
  11. #include "gemfiw.h"
  12. #include "geme.h"
  13.  
  14. class GEMiconformwindow : public GEMformwindow {
  15. public:
  16.     GEMiconformwindow(GEMactivity& act, const GEMrsc& in, int RSCindex, GEMformiconwindow* of) :
  17.         GEMformwindow(act,in,RSCindex,0),
  18.         parent(of)
  19.     {
  20.     }
  21.  
  22.     GEMiconformwindow(const GEMiconformwindow& copy, GEMformiconwindow* of) :
  23.         GEMformwindow(copy),
  24.         parent(of)
  25.     {
  26.     }
  27.  
  28.     virtual void Top(const GEMevent& e)
  29.     {
  30.         Click(e);
  31.     }
  32.  
  33.     virtual GEMfeedback Click(const GEMevent&)
  34.     {
  35.         GEMevent ev;
  36.         ev.Rectangle(ev.X()-1,ev.Y()-1,3,3,TRUE); // Wait for mouse move >1 ...
  37.         ev.Button(1,0); // ... or for button up.
  38.         ev.Get(MU_M1|MU_BUTTON);
  39.         if (ev.Rectangle()) {
  40.             int bx,by,bw,bh;
  41.             int nx,ny;
  42.             wind_get(0,WF_WORKXYWH,&bx,&by,&bw,&bh);
  43.             GRect w=BorderRect();
  44.             graf_dragbox(w.g_w,w.g_h,w.g_x,w.g_y,bx,by,bw,bh,&nx,&ny);
  45.             GEMformwindow::Move(nx,ny);
  46.         } else {
  47.             Close();
  48.             if (parent->Zooms(TRUE)) {
  49.                 GRect s=BorderRect();
  50.                 GRect f=parent->BorderRect();
  51.                 graf_growbox(s.g_x,s.g_y,s.g_w,s.g_y,f.g_x,f.g_y,f.g_w,f.g_h);
  52.             } else {
  53.                 parent->Zooms(FALSE);
  54.             }
  55.             parent->IconOpened();
  56.         }
  57.         return ContinueInteraction;
  58.     }
  59.  
  60. private:
  61.     GEMformiconwindow* parent;
  62. };
  63.  
  64. GEMformiconwindow::GEMformiconwindow(GEMactivity& act, const GEMrsc& in, int RSCform, int RSCicon) :
  65.     GEMformwindow(act,in,RSCform,CLOSER|MOVER|NAME|FULLER),
  66.     icon(new GEMiconformwindow(act,in,RSCicon,this))
  67. {
  68.     Zooms(TRUE);
  69. }
  70.  
  71. GEMformiconwindow::GEMformiconwindow(GEMactivity& act, const GEMrsc& in, int RSCform, int RSCicon, int Parts) :
  72.     GEMformwindow(act,in,RSCform,Parts),
  73.     icon(new GEMiconformwindow(act,in,RSCicon,this))
  74. {
  75.     Zooms(TRUE);
  76. }
  77.  
  78. GEMformiconwindow::GEMformiconwindow(const GEMformiconwindow& copy) :
  79.     GEMformwindow(copy),
  80.     icon(new GEMiconformwindow(*copy.icon,this))
  81. {
  82. }
  83.  
  84. GEMformiconwindow::~GEMformiconwindow()
  85. {
  86.     delete icon;
  87. }
  88.  
  89. void GEMformiconwindow::UserFulled()
  90. {
  91.     Close();
  92.     if (Zooms(TRUE)) {
  93.         GRect s=BorderRect();
  94.         GRect f=icon->BorderRect();
  95.         graf_shrinkbox(f.g_x,f.g_y,f.g_w,f.g_y,s.g_x,s.g_y,s.g_w,s.g_h);
  96.     } else {
  97.         Zooms(FALSE);
  98.     }
  99.     icon->Open();
  100. }
  101.  
  102. void GEMformiconwindow::Open()
  103. {
  104.     if (IsIconified()) icon->Close();
  105.     GEMformwindow::Open();
  106. }
  107.  
  108. void GEMformiconwindow::IconOpened()
  109. {
  110.     Open();
  111. }
  112.  
  113. bool GEMformiconwindow::IsIconified() const
  114. {
  115.     return icon->IsOpen();
  116. }
  117.